package com.smart.community.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.smart.community.user.entity.Menu;

import java.util.List;
import java.util.Map;

/**
 * 菜单Service接口
 * 
 * @author Wu.Liang
 */
public interface MenuService extends IService<Menu> {

    /**
     * 获取菜单树
     * 
     * @return 菜单树
     * @throws Exception 统一异常
     */
    List<Map<String, Object>> getMenuTree() throws Exception;

    /**
     * 根据用户ID获取菜单树
     * 
     * @param userId 用户ID
     * @return 菜单树
     * @throws Exception 统一异常
     */
    List<Map<String, Object>> getMenuTreeByUserId(Long userId) throws Exception;

    /**
     * 根据角色ID获取菜单列表
     * 
     * @param roleId 角色ID
     * @return 菜单列表
     * @throws Exception 统一异常
     */
    List<Menu> getMenusByRoleId(Long roleId) throws Exception;

    /**
     * 根据父菜单ID获取子菜单列表
     * 
     * @param parentId 父菜单ID
     * @return 子菜单列表
     * @throws Exception 统一异常
     */
    List<Menu> getMenusByParentId(Long parentId) throws Exception;

    /**
     * 根据菜单编码获取菜单
     * 
     * @param menuCode 菜单编码
     * @return 菜单信息
     * @throws Exception 统一异常
     */
    Menu getMenuByCode(String menuCode) throws Exception;

    /**
     * 根据权限标识获取菜单
     * 
     * @param permission 权限标识
     * @return 菜单信息
     * @throws Exception 统一异常
     */
    Menu getMenuByPermission(String permission) throws Exception;

    /**
     * 检查菜单编码是否存在
     * 
     * @param menuCode 菜单编码
     * @return 是否存在
     * @throws Exception 统一异常
     */
    boolean checkMenuCodeExists(String menuCode) throws Exception;

    /**
     * 获取用户菜单权限列表
     * 
     * @param userId 用户ID
     * @return 菜单权限列表
     * @throws Exception 统一异常
     */
    List<String> getUserMenuPermissions(Long userId) throws Exception;
} 